﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;

using Барс.Своды.АргументыСобытийОтчетнойФормы;
using Барс.Своды.ОтчетнаяФорма;
using Барс.Своды.ТипыЯчеек;
using Барс.Своды.Увязки;
using Барс.Ядро;

namespace Барс.Своды
{
	public partial class МодульФормы_Вакцинация : БазовыйОбработчикФормы
	{
		IУниверсальныйСправочник Справочник_Инфекции = null;
		IУниверсальныйСправочник Справочник_Аппликация = null;
		IУниверсальныйСправочник Справочник_Бюджет = null;
		IУниверсальныйСправочник Справочник_ГодыКонтингентов = null;
		IУниверсальныйСправочник Справочник_Производитель = null;
		
		private List<IЗаписьСправочника> ПолучитьДочерниеЗаписи(string РодительскаяЗаписьСправочника, IУниверсальныйСправочник справочник)
               {
					//Барс.Интерфейс.Сообщение.Показать(РодительскаяЗаписьСправочника.Код.ToString());
					//Барс.Интерфейс.Сообщение.Показать(справочник.КодСправочника.ToString());
                       List<IЗаписьСправочника> источникЗаписей = new List<IЗаписьСправочника>();
                       //ищем все записи для которыз запись переданная в параметре является родительской
                       foreach (IЗаписьСправочника записьСправочника in справочник.Записи)
                       {
                               if ((записьСправочника.IРодительскаяЗапись != null) && (записьСправочника.IРодительскаяЗапись.Код == РодительскаяЗаписьСправочника))
                               {
									//Барс.Интерфейс.Сообщение.Показать(записьСправочника.Код.ToString());	
                                    источникЗаписей.Add(записьСправочника);
                                       //источникЗаписей.AddRange(ПолучитьДочерниеЗаписи(записьСправочника, справочник));
                               }
                       }
                       return источникЗаписей;
               }

        private List<IЗаписьСправочника> ПолучитьРодительскиеЗаписи(IУниверсальныйСправочник справочник, List<String> Исключения){
			        List<IЗаписьСправочника> источникЗаписей = new List<IЗаписьСправочника>();
				    foreach (IЗаписьСправочника записьСправочника in   справочник.Записи) {
					   if (	записьСправочника.IРодительскаяЗапись == null )
					{
						bool Исключить = false;
						foreach (string Код in Исключения)
							if (записьСправочника.Код == Код) Исключить = true;
						if (!Исключить)
							источникЗаписей.Add(записьСправочника);						
					}
						     
					}   
			        return источникЗаписей;
			   }
		

		
		#region Получить источник записей для выбора из справочника
		public override object ПолучитьИсточникЗаписейДляВыбораИзСправочника( АргументыСобытияПолученияИсточникаЗаписейДляВыбораИзСправочника Аргументы )
		{
			ВыборИзУниверсальногоСправочника ТекущийСправочник = new ВыборИзУниверсальногоСправочника();
			if (Справочник_Инфекции == null)
			{
				ИдентификаторУниверсальногоСправочника идентификатор = new ИдентификаторУниверсальногоСправочника();                
                идентификатор.ГруппаСправочника = "Мониторинг.Вакцинация";
                идентификатор.ДатаАктуальности = Форма.Идентификатор.КомпонентОтчетногоПериода.IОтчетныйПериод.ДатаНачала;
				УниверсальныйКлассификатор универсальныйКлассификатор = new УниверсальныйКлассификатор(Форма.МенеджерСправочников);
				
				идентификатор.КодСправочника = "Инфекции";
                Справочник_Инфекции = универсальныйКлассификатор.ПолучитьСправочник(идентификатор,true);
				
				идентификатор.КодСправочника = "Аппликация";
		        Справочник_Аппликация = универсальныйКлассификатор.ПолучитьСправочник(идентификатор,true);
				
				идентификатор.КодСправочника = "Бюджет";
                Справочник_Бюджет = универсальныйКлассификатор.ПолучитьСправочник(идентификатор,true);
				
				идентификатор.КодСправочника = "ГодыКонтингентов";
                Справочник_ГодыКонтингентов = универсальныйКлассификатор.ПолучитьСправочник(идентификатор,true);
				
				идентификатор.КодСправочника = "Производитель";
                Справочник_Производитель = универсальныйКлассификатор.ПолучитьСправочник(идентификатор,true);
								
			}
			List<String> Исключения = new List<String>();
			Исключения.Clear();
			if (Справочник_Инфекции != null)
			{
				int Столбец = int.Parse(Аргументы.КодСтолбца);
				if (Столбец == 1) 
				{
					List<IЗаписьСправочника> Записи_Инфекции = ПолучитьРодительскиеЗаписи(Справочник_Инфекции, Исключения);
	            	ТекущийСправочник.СписокЗаписей = Записи_Инфекции;
					Аргументы.ТаблицаДанных.МатрицаЗначений[Аргументы.КодСтроки, "4"].Значение = null;					
				}
				if (Столбец == 2)
				{
					Исключения.Add("2010");
					List<IЗаписьСправочника> Записи_ГодыКонтингентов = ПолучитьРодительскиеЗаписи(Справочник_ГодыКонтингентов, Исключения);
	            	ТекущийСправочник.СписокЗаписей = Записи_ГодыКонтингентов;
				}
				if (Столбец == 4)
				{
					List<IЗаписьСправочника> Записи_2 = ПолучитьДочерниеЗаписи(Аргументы.ТаблицаДанных.МатрицаЗначений[Аргументы.КодСтроки,"1"].Значение.ToString(), Справочник_Инфекции);
	            	ТекущийСправочник.СписокЗаписей = Записи_2;
					//(IЗаписьСправочника)Аргументы.ТаблицаДанных.МатрицаЗначений[Аргументы.КодСтроки,"1"].Значение;
					//Барс.Интерфейс.Сообщение.Показать(Аргументы.ТаблицаДанных.МатрицаЗначений[Аргументы.КодСтроки,"1"].Значение.ToString());
				}
				/*if (Столбец == 7)
				{
					Аргументы.ТаблицаДанных.МатрицаЗначений[Аргументы.КодСтроки, "7"].Значение = null;
	
				}*/
			}
			
			if(ТекущийСправочник.СписокЗаписей == null)
				Аргументы.ОтменитьВыбор = true;
			
			return ТекущийСправочник;
		}
		#endregion
	}
}